DMSを使ったSQL Serverの継続的なレプリケーションを行う
こんにちは、吉井です。
いかがお過ごしでしょうか。
以前 DMS を使ったデータベース移行のエントリを書いています。
前回はまさにさわりといった内容でしたが、今回は DMS を使用した継続的なレプリケーションを試します。
本エントリでは、ソース/ターゲットデータベース共に SQL Server としています。
継続的なレプリケーションとは
ソースデータベースでなされた変更をキャプチャーし、ターゲットデータベースへ継続的に変更点をマージします。
Oracle DB であれば REDO ログ、SQL Server であればトランザクションログ、MySQLであれば binlogs をキャプチャーします。
以下のようなシーンで活用できるかと思います。
- OnP から AWS へデータ移行したいが、一括移行するには時間的な制限がある。
移行前週にフルバックアップを仮移行しておき、継続的レプリケーションで本番移行に備える。 - 製品ネイティブなレプリケーションツールを使ってデータ複製したいが、諸事情で使えない。
代わりになる簡易なレプリケーションツールが欲しい。
準備
それでは早速継続的なレプリケーションの準備をしていきます。
ファイアウォール
DMS からソース/ターゲットデータベースに対して DB 接続が行われます。
OnP のファイアウォール、データベースサーバーの Windows ファイアウォール で DMS のIPアドレスを許可するように設定します。
DMS のIPアドレスは AWS マネジメントコンソールの DMS レプリケーションインスタンス画面で確認することが出来ます。
セキュリティグループ
DMP 用にセキュリティグループを作成します。
ソース/ターゲットデータベースが OnP にある場合は OnP 側のグローバルIPアドレスからの通信を許可するルールを作ります。
ソース/ターゲットデータベースが同じ VPC にある場合はソース/ターゲットデータベースとレプリケーションインスタンスを同じセキュリティグループにすると管理が楽になると思います。
SQL Server 認証モード
ソース/ターゲットデータベースに対して SQL Server 認証モードを有効にします。
DMS 用のログインユーザーを作成し、sysadmin のロールを付与します。
長期間のレプリケーションを予定している場合には、パスワード有効期限を十分に長い期間、または、無期限に設定します。
復旧モデル
復旧モデルを「完全」、または、「一括ログ」にします。
運用中の SQL Server を「単純」から「完全」、または、「一括ログ」へ変更する際には、パフォーマンスに関する影響調査、ログファイル増加によるディスク領域への影響調査を事前に行っておきます。
ディストリビューション
SSMS でレプリケーションフォルダを右クリックし、「ディストリビューションの構成」を行います。
フルバックアップのコピー
一度手動で同期する必要があります。
ソースデータベースからターゲットデータベースへフルバックアップのコピー(リストア)をします。
キャプチャーしないもの
インデックス、ユーザー、権限、ストアドプロシジャー、レプリケーションの対象としていないデータベースの変更はキャプチャーしません。
ソースデータベースでこれらを変更した場合は、必要に応じてターゲットデータベースも手動で変更します。
DMS 設定
準備が終わりましたら DMS 設定を行います。
AWSマネジメントコンソールへログインし、DMSを開きます。
サブネットグループの作成
サブネットグループを作ります。
左側メニューから「サブネットグループ」をクリックしサブネットグループを作成します。
Replication InstanceをMulti-AZ構成にするのがベストプラクティスです。
レプリケーションインスタンスの作成
左側メニューから「レプリケーションインスタンス」をクリックします。
ソース/ターゲットデータベースがインターネットアクセスが必須の場合は「パブリックアクセス可能」にチェックを入れます。
アドバンストを展開します。
前の手順で作成したサブネットグループを指定します。
アベイラビリティゾーンはターゲットデータベースを同じゾーンを、セキュリティグループは DMS 用に作成したセキュリティグループを指定します。
エンドポイントの作成
左側メニューから「エンドポイント」をクリックし、 ソース/ターゲット 2つのエンドポイントを作成します。
各項目に値を設定したら、ページ下部にある「テストの実行」をクリックし、接続が成功することを確認します。
タスクの作成
左側メニューから「タスク」をクリックしてタスクを作成します。
前の手順で作成したレプリケーションインスタンス、ソースエンドポイント、ターゲットエンドポイントを指定します。
移行タイプには「データ変更のみをレプリケートする」を指定します。
テーブルマッピングで対象とするスキーマとテーブルを指定します。
スキーマ内の全てのテーブルを指定する場合は「%」とします。
タスクのステータスが「レプリケーション進行中」になったことを確認します。
ソースデータベースとターゲットデータベースのテーブル行数やデータを比較してレプリケーションが正常に動作していることを確認しておきます。